#include <iostream>
#include <cmath>
#include "../CImg/CImg.h"
using namespace std;
using namespace cimg_library;

int main(int argc, char *argv[]) {
	CImgDisplay da, db, dc, dd;

	
	// ejercicio a
	CImg<unsigned char> a(256, 256, 1, 1); 
	for(unsigned i=0; i<256; i++){
		for(unsigned j=0; j<256; j++){
			a(i, j)=i;
		}
	}
	da.assign(a);
	
	// ejercicio b
	CImg<unsigned char> b(100, 100, 1, 1); 
	for(unsigned i=0; i<100; i++){
		for(unsigned j=0; j<100; j++){
			b(i, j)=i;
		}
	}
	b.resize(256, 256); // la ponemos del mismo tamanio de la otra para poder apreciar la diferencia
	db.assign(b);
	
	
	// ejercicio c
	CImg<unsigned char> c(100, 100, 1, 1);
	for(unsigned i=0; i<100; i++){
		
		for(unsigned j=0; j<100; j++){
			c(i, j)=(i%2)*255;
		}
	}
	//c.resize(256, 256); // la ponemos del mismo tamanio de la otra para poder apreciar la diferencia
	dc.assign(c);
	
	
	// ejercicio d
	unsigned const size=400;
	float radio=75;
	CImg<unsigned char> d(size, size, 1, 1);
	// rasterizamos la imagen (circulo) pixel por pixel
	for(unsigned i=0; i<size; i++){
		for(unsigned j=0; j<size; j++){
			d(i, j)=sqrt(powf(i-size/2.0,2)+powf(j-size/2.0,2))>radio?255:0;
		}
	}
	dd.assign(d);
	
	// esperamos que alguno de todos los displays sea cerrado para salir
	while(!da.is_closed() && !db.is_closed() && !dc.is_closed() && !dd.is_closed()){
		da.wait_all(); // esperamos un evento en cualquier display
		
		if(db.is_key('n')){
			static int n=0;
			n=(n==0)?1:0; // enciende/apaga la normalizacion del display
			db.assign(b,(n==0)?"No normalizado":"Normalizado",n); // setea el display normalizado o no reasignando la imagen
		}
	}
	
	return 0;
}


